package 中等.二分查找;

import java.math.BigDecimal;
import java.util.Scanner;

/**
 * 描述
 * 计算一个浮点数的立方根，不使用库函数。
 * 保留一位小数。
 * 数据范围：∣val∣≤20
 * 输入描述：
 * 待求解参数，为double类型（一个实数）
 * <p>
 * 输出描述：
 * 输出参数的立方根。保留一位小数。
 */
public class 求解立方根 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double val = sc.nextDouble();
        int f = val < 0 ? -1 : 1;
        val = Math.abs(val);
        double ans = 0;
        double left = 0, right = 20;
        while (left <= right) {
            double mid = left + (right - left) / 2;
            // 保留一位小数
            mid = BigDecimal.valueOf(mid).setScale(1, BigDecimal.ROUND_HALF_DOWN).doubleValue();
            double curVal = mid * mid * mid;
            if (curVal == val) {
                System.out.println(mid);
                break;
            } else if (curVal > val) {
                // 可能有精度损失，需要用 BigDecimal
                right = BigDecimal.valueOf(mid - 0.1).setScale(1, BigDecimal.ROUND_HALF_DOWN).doubleValue();
            } else {
                left = BigDecimal.valueOf(mid + 0.1).setScale(1, BigDecimal.ROUND_HALF_DOWN).doubleValue();
            }

            // 求的是和 val 的差值最小的答案
            if (Math.abs(val - curVal) < Math.abs(val - ans * ans * ans)) {
                ans = mid;
            }
        }
        System.out.println(ans * f);
    }

}
